iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0

昨天我們談到了專案目錄結構,知道了專案隨著功能成長,必須有清楚的檔案配置,才能保持可維護性。但光有好的結構還不夠,因為專案要能順利執行,還需要「正確的環境」

在 Python 世界中,環境的管理一向是個痛點:不同專案依賴不同版本的套件,甚至需要測試在不同 Python 版本下的相容性。如果沒有做好隔離,很容易陷入「環境地獄」。

這就是我們今天要介紹的重點:Hatch 的環境管理功能

為什麼不用傳統的 venv?

在昨天的專案結構範例中,如果直接用 python -m venv venv 建立虛擬環境,接下來就會出現這樣的流程:

  1. 手動進入 venv/
  2. 執行 source venv/bin/activate.\venv\Scripts\activate
  3. 自己安裝套件 (pip install ...)
  4. 自己維護 requirements.txt

久而久之,每個專案的環境流程都不一樣,不只麻煩,還容易忘記該怎麼設定。

Hatch 則把這些步驟整合進 pyproject.toml,讓「專案結構」和「環境設定」統一管理,這也是它工程化的一大優點。

該如何使用Hatch ?

Day 2 的時候,我們已經搶先提到過 Hatch,並且跟 venvconda 做了比較。但當時只是幫大家認識它的定位:一個「現代化的 Python 專案管理工具」。

經過 Day 4 的專案目錄結構介紹,我們已經有一個清晰的專案架構基礎。接下來,就要實際把 Hatch 用起來,看看它是如何幫我們建立與管理虛擬環境的。

建立環境

如果你的專案已經有一份透過 Hatch 建立的 pyproject.toml,那麼在本地端就能很容易建立虛擬環境並啟動專案。

這就像在 Java 世界裡,我們會透過 MavenGradle 來管理專案,pom.xml/ settings.gradle 在那裡扮演核心角色,而在 Python 工程化中,pyproject.toml 就是扮演相同角色的關鍵設定檔。

只要在專案目錄下輸入以下指令,就能快速建立環境:

hatch env create

Hatch 會自動依照**pyproject.toml**的設定來安裝依賴套件,完全不需要額外維護requirements.txt。這也是 Hatch 比傳統venv更工程化的一大差異。

Hatch 預設會建立一個叫做default的環境,並根據**pyproject.toml**的設定來安裝必要套件。比起傳統venv這整個流程更直覺,也不用自己管理requirements.txt

如果你是第一次建置專案,可以使用我們在Day2所提過的方式,來建立**pyproject.toml**,讓我們複習一下該如何透過Hatch建置一個新的專案,很簡單只要透過下列指令:

hatch new myproject

啟動環境

建立好環境後,有兩種方式使用它:

  • 進入環境 shell

    hatch shell
    

    這會幫你打開一個新的 shell session,並自動載入環境,退出只要 exit

    由下圖可以看到,我透過指令進入到了這個專案的虛擬環境

    https://ithelp.ithome.com.tw/upload/images/20250919/20178117PpLnXOYipJ.png

    而我們可以透過,下列指令來確認我當前所在的虛擬環境是哪一個

    echo $VIRTUAL_ENV
    
  • 編譯後執行

    # Step 1.
    hatch build
    
    # Step 2. 
    hatch run start
    

    這樣Hatch會依照**pyproject.toml**來幫你編譯你的檔案,然後產生為一個壓縮檔,再由Hatch的指令來幫你執行應用程式,如下圖。這樣不用手動啟動或切換環境,非常適合 CI/CD pipeline 或一次性指令。

    https://ithelp.ithome.com.tw/upload/images/20250919/20178117MbSZg9YYLS.png

多環境管理

pyproject.toml 中,我們可以定義多個環境。例如:

[tool.hatch.envs.dev]
dependencies = [
  "black",
  "ruff",
]

[tool.hatch.envs.test]
dependencies = [
  "pytest",
]

然後就能分別建立它們:

hatch env create dev
hatch env create test

當執行完畢我們可以用下列語法檢查環境的建置

hatch env show

這會將當下所有環境的配置列出來

https://ithelp.ithome.com.tw/upload/images/20250919/20178117mDFY0WQvoL.png

接下來要進入不同環境,只要指定名稱:

hatch shell dev
hatch shell test

移除環境

如果某個環境不再需要,可以直接刪除:

hatch env remove dev

乾乾淨淨,不會留下一堆沒用的檔案。

結論

在今天我們先熟悉使用Hatch來建置我們專案的虛擬環境,在往後的章節我們在工程化的過程中搭配Hatch工具,來節省掉我們在團隊協作或者相關的開發過程中的阻礙,來讓專案能更順暢地在不同人、不同環境之間協作與執行。

接下來,在 Day 6 我們會進一步介紹:如何用 Hatch 管理套件依賴,讓團隊所有人都能在相同設定下開發,避免「在我電腦能跑,在你電腦就掛掉」的窘境。


上一篇
Day 4 - 專案目錄結構:從腳本到可維護的專案設計
下一篇
Day 6 - 依賴管理策略:直接安裝 vs. 鎖定版本
系列文
30 天 Python 專案工坊:環境、結構、測試到部署全打通29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言